/* * Copyright 2012 - 2013 Benjamin Weiss * Copyright 2012 Neofonie Mobile GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.yixia.zi.widget.crouton; import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; /** * The style for a {@link Crouton}. */ public class Style { /** * Display a {@link Crouton} for an infinite amount of time or * until {@link de.keyboardsurfer.android.widget.crouton.Crouton#cancel()} has been called. */ public static final int DURATION_INFINITE = -1; /** * Default style for alerting the user. */ public static final Style ALERT; /** * Default style for confirming an action. */ public static final Style CONFIRM; /** * Default style for general information. */ public static final Style INFO; public static final int holoRedLight = 0xffff4444; public static final int holoGreenLight = 0xff99cc00; public static final int holoBlueLight = 0xff33b5e5; static { ALERT = new Builder().setDuration(5000).setBackgroundColorValue(holoRedLight).setHeight(LayoutParams.WRAP_CONTENT) .build(); CONFIRM = new Builder().setDuration(3000).setBackgroundColorValue(holoGreenLight).setHeight( LayoutParams.WRAP_CONTENT).build(); INFO = new Builder().setDuration(3000).setBackgroundColorValue(holoBlueLight).setHeight(LayoutParams.WRAP_CONTENT) .build(); } /** * The durationInMilliseconds the {@link Crouton} will be displayed in * milliseconds. */ final int durationInMilliseconds; /** * The resource id of the backgroundResourceId. * <p/> * 0 for no backgroundResourceId. */ final int backgroundColorResourceId; /** * The resource id of the backgroundDrawableResourceId. * <p/> * 0 for no backgroundDrawableResourceId. */ final int backgroundDrawableResourceId; /** * The backgroundColorResourceValue's e.g. 0xffff4444; * <p/> * -1 for no value. */ final int backgroundColorValue; /** * Whether we should isTileEnabled the backgroundResourceId or not. */ final boolean isTileEnabled; /** * The text colorResourceId's resource id. * <p/> * 0 sets the text colorResourceId to the system theme default. */ final int textColorResourceId; /** * The height of the {@link Crouton} in pixels. */ final int heightInPixels; /** * Resource ID for the height of the {@link Crouton}. */ final int heightDimensionResId; /** * The width of the {@link Crouton} in pixels. */ final int widthInPixels; /** * Resource ID for the width of the {@link Crouton}. */ final int widthDimensionResId; /** * The text's gravity as provided by {@link Gravity}. */ final int gravity; /** * An additional image to display in the {@link Crouton}. */ final Drawable imageDrawable; /** * An additional image to display in the {@link Crouton}. */ final int imageResId; /** * The {@link ImageView.ScaleType} for the image to display in the * {@link Crouton}. */ final ImageView.ScaleType imageScaleType; /** * The text size in sp * <p/> * 0 sets the text size to the system theme default */ final int textSize; /** * The text shadow color's resource id */ final int textShadowColorResId; /** * The text shadow radius */ final float textShadowRadius; /** * The text shadow vertical offset */ final float textShadowDy; /** * The text shadow horizontal offset */ final float textShadowDx; /** * The text appearance resource id for the text. */ final int textAppearanceResId; /** * The resource id for the in animation */ final int inAnimationResId; /** * The resource id for the out animation */ final int outAnimationResId; /** * The padding for the crouton view content in pixels */ final int paddingInPixels; /** * The resource id for the padding for the view content */ final int paddingDimensionResId; private Style(final Builder builder) { this.durationInMilliseconds = builder.durationInMilliseconds; this.backgroundColorResourceId = builder.backgroundColorResourceId; this.backgroundDrawableResourceId = builder.backgroundDrawableResourceId; this.isTileEnabled = builder.isTileEnabled; this.textColorResourceId = builder.textColorResourceId; this.heightInPixels = builder.heightInPixels; this.heightDimensionResId = builder.heightDimensionResId; this.widthInPixels = builder.widthInPixels; this.widthDimensionResId = builder.widthDimensionResId; this.gravity = builder.gravity; this.imageDrawable = builder.imageDrawable; this.textSize = builder.textSize; this.textShadowColorResId = builder.textShadowColorResId; this.textShadowRadius = builder.textShadowRadius; this.textShadowDx = builder.textShadowDx; this.textShadowDy = builder.textShadowDy; this.textAppearanceResId = builder.textAppearanceResId; this.inAnimationResId = builder.inAnimationResId; this.outAnimationResId = builder.outAnimationResId; this.imageResId = builder.imageResId; this.imageScaleType = builder.imageScaleType; this.paddingInPixels = builder.paddingInPixels; this.paddingDimensionResId = builder.paddingDimensionResId; this.backgroundColorValue = builder.backgroundColorValue; } /** * Builder for the {@link Style} object. */ public static class Builder { private int durationInMilliseconds; private int backgroundColorValue; private int backgroundColorResourceId; private int backgroundDrawableResourceId; private boolean isTileEnabled; private int textColorResourceId; private int heightInPixels; private int heightDimensionResId; private int widthInPixels; private int widthDimensionResId; private int gravity; private Drawable imageDrawable; private int textSize; private int textShadowColorResId; private float textShadowRadius; private float textShadowDx; private float textShadowDy; private int textAppearanceResId; private int inAnimationResId; private int outAnimationResId; private int imageResId; private ImageView.ScaleType imageScaleType; private int paddingInPixels; private int paddingDimensionResId; public Builder() { durationInMilliseconds = 3000; paddingInPixels = 10; backgroundColorResourceId = android.R.color.holo_blue_light; backgroundDrawableResourceId = 0; backgroundColorValue = -1; isTileEnabled = false; textColorResourceId = android.R.color.white; heightInPixels = LayoutParams.WRAP_CONTENT; widthInPixels = LayoutParams.MATCH_PARENT; gravity = Gravity.CENTER; imageDrawable = null; inAnimationResId = 0; outAnimationResId = 0; imageResId = 0; imageScaleType = ImageView.ScaleType.FIT_XY; } /** * Set the durationInMilliseconds option of the {@link Crouton}. * * @param duration * The durationInMilliseconds the crouton will be displayed * {@link Crouton} in milliseconds. * @return the {@link Builder}. */ public Builder setDuration(int duration) { this.durationInMilliseconds = duration; return this; } /** * Set the backgroundColorResourceId option of the {@link Crouton}. * * @param backgroundColorResourceId * The backgroundColorResourceId's resource id. * @return the {@link Builder}. */ public Builder setBackgroundColor(int backgroundColorResourceId) { this.backgroundColorResourceId = backgroundColorResourceId; return this; } /** * Set the backgroundColorResourceValue option of the {@link Crouton}. * * @param backgroundColorValue * The backgroundColorResourceValue's e.g. 0xffff4444; * @return the {@link Builder}. */ public Builder setBackgroundColorValue(int backgroundColorValue) { this.backgroundColorValue = backgroundColorValue; return this; } /** * Set the backgroundDrawableResourceId option for the {@link Crouton}. * * @param backgroundDrawableResourceId * Resource ID of a backgroundDrawableResourceId image drawable. * @return the {@link Builder}. */ public Builder setBackgroundDrawable(int backgroundDrawableResourceId) { this.backgroundDrawableResourceId = backgroundDrawableResourceId; return this; } /** * Set the heightInPixels option for the {@link Crouton}. * * @param height * The height of the {@link Crouton} in pixel. Can also be * {@link LayoutParams#MATCH_PARENT} or * {@link LayoutParams#WRAP_CONTENT}. * @return the {@link Builder}. */ public Builder setHeight(int height) { this.heightInPixels = height; return this; } /** * Set the resource id for the height option for the {@link Crouton}. * * @param heightDimensionResId * Resource ID of a dimension for the height of the {@link Crouton}. * @return the {@link Builder}. */ public Builder setHeightDimensionResId(int heightDimensionResId) { this.heightDimensionResId = heightDimensionResId; return this; } /** * Set the widthInPixels option for the {@link Crouton}. * * @param width * The width of the {@link Crouton} in pixel. Can also be * {@link LayoutParams#MATCH_PARENT} or * {@link LayoutParams#WRAP_CONTENT}. * @return the {@link Builder}. */ public Builder setWidth(int width) { this.widthInPixels = width; return this; } /** * Set the resource id for the width option for the {@link Crouton}. * * @param widthDimensionResId * Resource ID of a dimension for the width of the {@link Crouton}. * @return the {@link Builder}. */ public Builder setWidthDimensionResId(int widthDimensionResId) { this.widthDimensionResId = widthDimensionResId; return this; } /** * Set the isTileEnabled option for the {@link Crouton}. * * @param isTileEnabled * <code>true</code> if you want the backgroundResourceId to be * tiled, else <code>false</code>. * @return the {@link Builder}. */ public Builder setTileEnabled(boolean isTileEnabled) { this.isTileEnabled = isTileEnabled; return this; } /** * Set the textColorResourceId option for the {@link Crouton}. * * @param textColor * The resource id of the text colorResourceId. * @return the {@link Builder}. */ public Builder setTextColor(int textColor) { this.textColorResourceId = textColor; return this; } /** * Set the gravity option for the {@link Crouton}. * * @param gravity * The text's gravity as provided by {@link Gravity}. * @return the {@link Builder}. */ public Builder setGravity(int gravity) { this.gravity = gravity; return this; } /** * Set the image option for the {@link Crouton}. * * @param imageDrawable * An additional image to display in the {@link Crouton}. * @return the {@link Builder}. */ public Builder setImageDrawable(Drawable imageDrawable) { this.imageDrawable = imageDrawable; return this; } /** * Set the image resource option for the {@link Crouton}. * * @param imageResId * An additional image to display in the {@link Crouton}. * @return the {@link Builder}. */ public Builder setImageResource(int imageResId) { this.imageResId = imageResId; return this; } /** * The text size in sp */ public Builder setTextSize(int textSize) { this.textSize = textSize; return this; } /** * The text shadow color's resource id */ public Builder setTextShadowColor(int textShadowColorResId) { this.textShadowColorResId = textShadowColorResId; return this; } /** * The text shadow radius */ public Builder setTextShadowRadius(float textShadowRadius) { this.textShadowRadius = textShadowRadius; return this; } /** * The text shadow horizontal offset */ public Builder setTextShadowDx(float textShadowDx) { this.textShadowDx = textShadowDx; return this; } /** * The text shadow vertical offset */ public Builder setTextShadowDy(float textShadowDy) { this.textShadowDy = textShadowDy; return this; } /** * The text appearance resource id for the text. */ public Builder setTextAppearance(int textAppearanceResId) { this.textAppearanceResId = textAppearanceResId; return this; } /** * The resource id for the in animation */ public Builder setInAnimation(int inAnimationResId) { this.inAnimationResId = inAnimationResId; return this; } /** * The resource id for the out animation */ public Builder setOutAnimation(int outAnimationResId) { this.outAnimationResId = outAnimationResId; return this; } /** * The {@link android.widget.ImageView.ScaleType} for the image */ public Builder setImageScaleType(ImageView.ScaleType imageScaleType) { this.imageScaleType = imageScaleType; return this; } /** * The padding for the crouton view's content in pixels */ public Builder setPaddingInPixels(int padding) { this.paddingInPixels = padding; return this; } /** * The resource id for the padding for the crouton view's content */ public Builder setPaddingDimensionResId(int paddingResId) { this.paddingDimensionResId = paddingResId; return this; } /** * @return a configured {@link Style} object. */ public Style build() { return new Style(this); } } }